
嗨!是不是常常看著很多網站,總覺得它們少了點什麼?別再只滿足於單調的網頁背景了,我們需要一點「哇~好好玩!」的感覺!
今天就來跟大家聊聊,如何用 Vue.js 為網站加點魔法——用泡泡背景讓你的頁面瞬間療癒靈動起來,吸引訪客的目光。
不僅僅是視覺上更美麗,這些泡泡還能讓整個網站的氛圍變得更生動可愛。
在網頁設計中,背景動效是提升視覺吸引力的關鍵。
它能為網站增添層次感與動態效果,帶給訪客沉浸式的瀏覽體驗。
這篇文章將帶你深入了解如何用 Vue.js 進行背景動效設計,並透過實戰程式碼,教你一步步實現這些有趣的效果!

v-for 動態生成 50 個泡泡,每個泡泡的大小、位置、和運動速度皆為隨機設定,使畫面更加生動。insertKeyframes 函數,為每個泡泡生成獨立的動畫軌跡,創造出不斷浮動、變化的視覺效果,讓背景不再單調。1. 顏色背景類
包含:漸變背景、純色背景
2. 圖案與圖形背景類
包含:圖形背景、帶有圖案的背景、帶紋理的背景
3. 動態與影像背景類
包含:動畫背景、攝影背景、全螢幕背景
這三大背景類型讓我們能夠根據設計需求靈活選擇,不僅僅是裝飾,更能成為網站視覺效果和使用者體驗的重要一環。
這次,我們要帶你用 Vue.js 和 TypeScript 來打造一個超療癒的泡泡背景動畫!
這種柔和、清新的設計風格不僅讓網站變得更有層次感,還能增添一種彷彿置身水中的輕盈感,既有趣又不會喧賓奪主。
趕快看看這些步驟,讓你的網頁也能「冒泡泡」吧!
設計風格:我們選用了柔和的漸變背景,搭配隨機生成的泡泡動畫,營造出水中氣泡上浮的感覺,整個畫面立刻靈動起來!
動效實現:透過 TypeScript,動態生成 CSS @keyframes 規則,讓每顆泡泡都有自己獨特的運動軌跡,隨著節奏自由浮動,不斷變化。
完整程式碼
  <script setup lang="ts">
  import { CSSProperties, onMounted } from 'vue';
  
  // 生成隨機數函數,決定泡泡的尺寸、位置、運動速度
  const generateRandom = (min: number, max: number): number =>
    Math.floor(Math.random() * (max - min + 1)) + min;
  
    // 為每個泡泡生成樣式
  const generateBubbleStyle = (index: number): CSSProperties => {
    const bgpos = index % 2 === 0 ? 'top right' : 'center';
    const width = `${generateRandom(5, 100)}px`;
    const left = `${generateRandom(1, 100)}vw`;
    const bottom = `${generateRandom(1, 100)}vh`;
    const duration = `${generateRandom(3, 15)}s`;
  
    return {
        background: `radial-gradient(ellipse at ${bgpos}, #d9e7f1 0%, #b3cde0 46%, #72bde2 100%)`,
        width: width,
      height: width,
      left: left,
      bottom: bottom,
      position: 'absolute',
      borderRadius: '100%',
      opacity: '0.8',
      animation: `move${index} ${duration} infinite`,
    };
  };
  
  // 動態生成 keyframes 規則並插入到頁面
  const insertKeyframes = (index: number) => {
    const styleSheet = document.styleSheets[0];
    const randomBottom = generateRandom(0, 100);
    const randomTranslate = generateRandom(-100, 200);
  
    const keyframes = `
      @keyframes move${index} {
        0% {
          bottom: -100px;
        }
        100% {
          bottom: ${randomBottom}vh;
          transform: translate(${randomTranslate}px, 0);
          opacity: 0;
        }
      }
    `;
  
    styleSheet.insertRule(keyframes, styleSheet.cssRules.length);
  };
  
  // 初始化時為每個泡泡生成動畫規則
  onMounted(() => {
    for (let i = 1; i <= 50; i++) {
      insertKeyframes(i);
    }
  });
  </script>
  
  <template>
<div class="h-screen w-screen bg-gradient-to-b from-[#e6f2f8] to-[#94c9e4] relative overflow-hidden">
    <div
        v-for="index in 50"
        :key="index"
        :class="['bubble', 'block', 'absolute', 'rounded-full', 'opacity-80']"
        :style="generateBubbleStyle(index)"
      ></div>
    </div>
  </template>
  
  <style scoped>
  </style>
  
背景漸層:我們選用淡藍色的漸變作為背景,從 #e6f2f8 到 #94c9e4,這樣的漸層色調營造出一種輕柔、清新的視覺效果,讓整體畫面感覺舒適、自然。
這個背景不僅提供了柔和的襯托,也提升了泡泡的動態效果。
輕鬆實現:我們可以利用UnoCSS簡單設置漸層
bg-gradient-to-b 來設置漸層方向。from-[顏色] 設置起始色彩to-[顏色] 設置結束色彩。<div class="h-screen w-screen bg-gradient-to-b from-[#e6f2f8] to-[#94c9e4] relative overflow-hidden">
隨機泡泡生成
隨機化設計:透過 Vue 的 v-for 指令,我們動態生成了 50 個泡泡,每個泡泡的尺寸、位置、透明度和動畫速度都是隨機的,利用 generateRandom 函數生成範圍內的隨機數,確保每次的呈現都不相同。
// 生成隨機數函數,決定泡泡的尺寸、位置、運動速度
const generateRandom = (min: number, max: number): number =>
  Math.floor(Math.random() * (max - min + 1)) + min;
樣式設定:每個泡泡的樣式由 generateBubbleStyle 函數控制。這些樣式包括背景漸層、隨機大小、位置和動畫設定,讓泡泡的出現充滿了變化和驚喜。
// 為每個泡泡生成樣式
const generateBubbleStyle = (index: number): CSSProperties => {
  const bgpos = index % 2 === 0 ? 'top right' : 'center';
  const width = `${generateRandom(5, 100)}px`;
  const left = `${generateRandom(1, 100)}vw`;
  const bottom = `${generateRandom(1, 100)}vh`;
  const duration = `${generateRandom(3, 15)}s`;
  return {
    background: `radial-gradient(ellipse at ${bgpos}, #d9e7f1 0%, #b3cde0 46%, #72bde2 100%)`,
    width: width,
    height: width,
    left: left,
    bottom: bottom,
    position: 'absolute',
    borderRadius: '100%',
    opacity: '0.8',
    animation: `move${index} ${duration} infinite`,
  };
};
動態動畫插入
動畫生成:透過 insertKeyframes 函數,我們使用 TypeScript 動態生成 CSS @keyframes 規則。
這些規則會為每個泡泡創造獨特的運動軌跡,讓每顆泡泡都以不同的方式漂浮和消失。
// 動態生成 keyframes 規則並插入到頁面
const insertKeyframes = (index: number) => {
  const styleSheet = document.styleSheets[0];
  const randomBottom = generateRandom(0, 100);
  const randomTranslate = generateRandom(-100, 200);
  const keyframes = `
    @keyframes move${index} {
      0% {
        bottom: -100px;
      }
      100% {
        bottom: ${randomBottom}vh;
        transform: translate(${randomTranslate}px, 0);
        opacity: 0;
      }
    }
  `;
  styleSheet.insertRule(keyframes, styleSheet.cssRules.length);
};
運動軌跡:在這些動效中,每個泡泡的軌跡和運動速度都不一樣,這樣的設計讓每次訪問網站時的視覺效果都與眾不同。
動效初始化:透過 onMounted 生命週期鉤子,我們為每個泡泡生成並插入對應的動效規則。這樣一來,背景的動態效果會隨著頁面加載立即生效。
// 這裡可以設定泡泡的數量
onMounted(() => {
  for (let i = 1; i <= 50; i++) {
    insertKeyframes(i);
  }
});
學會使用 Vue.js 打造動態背景設計
隨機生成與個性化動畫技術
v-for 指令與 TypeScript 的隨機數生成方法,動態設計每個泡泡的大小、位置、速度,並為每個泡泡生成獨特的動畫軌跡,打造專屬於自己網站的獨特背景動效。增強視覺吸引力與使用者視覺體驗
快來挑戰一下自己,讓你的網站也充滿這些可愛的小泡泡吧! (〜^∇^)〜